#include <stdio.h>
#include <stdlib.h>

int main (int argc, char const* argv[])
{
    int n, m, i, j, t, null_flg;
    int a[100], b[100];

    while (1) {
        scanf("%d %d", &n, &m);
        if (n == 0 && m == 0) break;

        for (i = 0; i < n; i++) {
            scanf("%d", &a[i]);
        }
        for (i = 0; i < m; i++) {
            scanf("%d", &b[i]);
        }

        // 元素个数小于100，先选择法排序
        for (i = 0; i < n-1; i++) {
            for (j = i+1; j < n; j++) {
                if (a[i] > a[j]) {
                    t = a[i];
                    a[i] = a[j];
                    a[j] = t;
                }
            }
        }
        for (i = 0; i < m-1; i++) {
            for (j = i+1; j < m; j++) {
                if (b[i] > b[j]) {
                    t = b[i];
                    b[i] = b[j];
                    b[j] = t;
                }
            }
        }

        i = 0; j = 0;
        null_flg = 1;
        while (i < n && j < m) {
            // 当a元素比b小时，肯定不在b中，属于差集元素
            // i++有可能让i越界，所以加上i<n
            while (a[i] < b[j] && i < n) {
                printf("%d ", a[i]); i++;
                null_flg = 0;
            }
            
            // 当a元素比b大时，j++移动指针，直到a元素小于等于b元素
            // j++有可能让j越界，所以加上j<m
            while (a[i] > b[j] && j < m) {
                j++;
            }

            // 当a元素和b元素相等时，不属于差集
            // i和j都加1，移动指针到后一个元素
            // 整个循环加上i<n && j<m
            if (a[i] == b[j]) {
                i++; j++;
            }
        }

        // 如果a集合有剩下未被处理的元素，则都属于差集
        while (i < n) {
            printf("%d ", a[i]); i++;
            null_flg = 0;
        }
        
        // 当没有任何输出，证明差集是空集
        if (null_flg) printf("NULL");

        // 多个测试用例时，添加换行符
        printf("\n");
    }

    return 0;
}
